package com.xsq.audio;

import android.support.v4.media.MediaMetadataCompat;

import com.xsq.audio.player.bean.AudioPositionBean;

import java.util.List;

import io.reactivex.rxjava3.core.Observable;

/**
 * Created by Shiquan.Xiao on 2023/4/3.
 */
public interface IAudioController {

    /**
     * 连接媒体浏览器服务
     */
    void startService();

    /**
     * 设置需要播放的音频音频列表
     */
    void setAudioItemList(String rootId, List<AudioItemData> audioItemList);

    /**
     * 订阅指定专辑，目前默认是一个根专辑为/，为后期需要扩展有多个专辑
     *
     * @param rootId   专辑id
     */
    void subscribe(String rootId, IAudioSubscriptionCallback callback);

    /**
     * 一对一订阅和取消订阅
     */
    void unsubscribe(String rootId, IAudioSubscriptionCallback callback);

    /**
     * 播放指定媒体选项
     */
    void playAudioItem(AudioItemData data);

    /**
     * 播放指定音频id选项
     */
    void playAudioId(String audioId);

    /**
     * 设置播放音频列表
     */
    void sendAudioPlayData(String rootId, List<AudioItemData> audioItemList);

    /**
     * 播放正在执行音频
     */
    void play();

    /**
     * 暂停正在执行音频
     */
    void pause();

    /**
     * 停止正在执行音频
     */
    void stop();

    /**
     * 释放音乐服务
     */
    void close();

    /**
     * 下一首
     */
    void nextAudio();

    /**
     * 上一首
     */
    void previousAudio();

    /**
     * 控制播放位置
     */
    void seekTo(int mc);

    /**
     * 设置播放模式
     */
    void setRepeatMode(int repeatMode);

    /**
     * 设置随机播放模式
     */
    void setShuffleMode(int shuffleMode);

    /**
     * 是否正在播放
     */
    boolean isPlaying();

    /**
     * 是否正在播放
     */
    boolean isConnected();

    /**
     * 获取播放模式
     */
    int getRepeatMode();

    /**
     * 监听音频播放进度信息
     */
    Observable<AudioPositionBean> onPlayingPosBus();

    /**
     * 当前播放数据
     */
    MediaMetadataCompat getCurPlayingData();

    /**
     * 获取当前正在播放的数据列表
     */
    List<AudioItemData> getCurAudioItemList();

    /**
     * 添加控制器与服务器通信回调监听
     */
    void addIAudioControllerListener(IAudioControllerListener listener);

    /**
     * 删除指定控制器回调监听
     */
    void removeIAudioControllerListener(IAudioControllerListener listener);

    /**
     * 音频列表正在播放的选项
     */
    int getCurrentItemPosition();

}
